package com.vim.modules.web.service;

import com.vim.common.base.CrudServiceImpl;
import com.vim.common.utils.IdGen;
import com.vim.modules.web.dao.ModuleInfoMapper;
import com.vim.modules.web.model.ModuleInfo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
public class ModuleInfoService extends CrudServiceImpl<ModuleInfo> {

    @Resource
    private ModuleInfoMapper moduleInfoMapper;

    @Autowired
    public ModuleInfoService(ModuleInfoMapper mapper) {
        super(mapper);
    }

    @Override
    public int save(ModuleInfo entity) {
        entity.setModuleId(IdGen.uuid());
        return super.save(entity);
    }

    /**
     * 初始化所有模块
     */
    @Transactional(rollbackFor = Exception.class)
    public void initModuleList(List<ModuleInfo> moduleInfoList) {
        for(ModuleInfo info:moduleInfoList){
            if(StringUtils.isNoneBlank(info.getModuleCode()) && StringUtils.isNoneBlank(info.getModuleName())){
                if(StringUtils.isNoneBlank(info.getModuleParentCode())){
                    ModuleInfo parentFind = moduleInfoMapper.findModuleCode(info.getModuleParentCode());
                    if(null == parentFind){
                        ModuleInfo parentModule = new ModuleInfo();
                        parentModule.setModuleCode(info.getModuleParentCode());
                        parentModule.setModuleName(info.getModuleParentName());
                        save(parentModule);
                    }else{
                        parentFind.setModuleName(info.getModuleParentName());
                        update(parentFind);
                    }
                }

                ModuleInfo find = moduleInfoMapper.findModuleCode(info.getModuleCode());
                if(null == find){
                    save(info);
                }else{
                    find.setModuleCode(info.getModuleCode());
                    find.setModuleName(info.getModuleName());
                    find.setModuleDesc(info.getModuleDesc());
                    find.setModuleParentCode(info.getModuleParentCode());
                    find.setModuleParentName(info.getModuleParentName());
                    update(find);
                }
            }
        }
    }

    /**
     * 所有父级模块
     */
    public List<ModuleInfo> findOneLevelList() {
        return moduleInfoMapper.findOneLevelList();
    }

    /**
     * 所有子模块
     * @param moduleCode
     */
    public List<ModuleInfo> findSubLevelList(String moduleCode) {
        return moduleInfoMapper.findSubLevelList(moduleCode);
    }
}

